﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using SisGrafeno;
using SisGrafenoController;

namespace SisGrafenoApp
{
    public partial class CotizacionesForm : Form
    {
        public CotizacionesForm()
        {
            InitializeComponent();
        }

        public void RefreshGridProductos()
        {
            dgvProductos.Rows.Clear();

            List<Producto> list = MainController.getAllProducto();

            for (int i = 0; i < list.Count; i++)
            {
                dgvProductos.Rows.Add(new String[] {"" + list[i].getId(),
                                                        list[i].getNombre(),
                                                        list[i].getDescripcion(),
                                                    ""+ list[i].getPU()});
            }
        }

        private void CotizacionesForm_Load(object sender, EventArgs e)
        {
            // TODO: esta línea de código carga datos en la tabla 'inf282DataSet3.BooxLineaProducto' Puede moverla o quitarla según sea necesario.
            //this.booxLineaProductoTableAdapter1.Fill(this.inf282DataSet3.BooxLineaProducto);
            // TODO: esta línea de código carga datos en la tabla 'inf282DataSet2.BooxLineaProducto' Puede moverla o quitarla según sea necesario.
            //this.booxLineaProductoTableAdapter.Fill(this.inf282DataSet2.BooxLineaProducto);
            // TODO: esta línea de código carga datos en la tabla 'inf282DataSet1.BooxProducto' Puede moverla o quitarla según sea necesario.
            //this.booxProductoTableAdapter.Fill(this.inf282DataSet1.BooxProducto);
            RefreshGridProductos();
            txtDate.Text = "" + DateTime.Now;
        }

        private void btnAddToCotizacion_Click(object sender, EventArgs e)
        {
            int selRow = dgvProductos.SelectedRows[0].Index;
            int custId = Int32.Parse(dgvProductos.Rows[selRow].Cells[0].Value.ToString());
            double total = 0;

            dgvCotizacion.Rows.Add(new String[] { dgvProductos.Rows[selRow].Cells[0].Value.ToString(),
                                                  MainController.getProductoById(custId).getNombre(),
                                                  txtCantidad.Text,
                                                  ""+MainController.getProductoById(custId).getPU()*Int32.Parse(txtCantidad.Text)});

            for (int i = 0; i < dgvCotizacion.Rows.Count; i++)
            {
                total += Double.Parse(dgvCotizacion.Rows[i].Cells[3].Value.ToString());
            }
            txtTotal.Text = "" + total;

        }

        private void txtCodCliente_TextChanged(object sender, EventArgs e)
        {
            if(txtCodCliente.Text != "")
                txtName.Text = "" + MainController.getCustomerById(Int32.Parse(txtCodCliente.Text)).getNombres() + " " +
                    MainController.getCustomerById(Int32.Parse(txtCodCliente.Text)).getApellidos();
        }

        private void btnGenerate_Click(object sender, EventArgs e)
        {
            Cotizacion cot = new Cotizacion();
            List<Cotizacion> aux = MainController.getAllCotizacion();
            NotaCredito not = new NotaCredito();

            not.setId(0);

            cot.setId(aux.Count + 1);
            cot.setMontoTotal(Double.Parse(txtTotal.Text));
            cot.setFecha(DateTime.Parse(txtDate.Text));
            cot.setEstado(cmbEstado.SelectedItem.ToString());
            cot.addNotaCredito(not);
            cot.addCliente(MainController.getCustomerById(Int32.Parse(txtCodCliente.Text)));

            MainController.addCotizacion(cot);

            for (int i = 0; i < dgvCotizacion.Rows.Count; i++)
            {
                LineaProducto linea = new LineaProducto();
                linea.setIdLinea(i + 1);
                linea.setProducto(MainController.getProductoById(Int32.Parse(dgvCotizacion.Rows[i].Cells[0].Value.ToString())));
                linea.setCotizacion(cot);
                linea.setSubTotal(Double.Parse(dgvCotizacion.Rows[i].Cells[3].Value.ToString()));
                linea.setCantidad(Int32.Parse(dgvCotizacion.Rows[i].Cells[2].Value.ToString()));

                MainController.addLineaProducto(linea);
            }
            MessageBox.Show("La cotización se ha registrado exitosamente!",
                   "Resultado",
                   MessageBoxButtons.OK,
                   MessageBoxIcon.Information,
                   MessageBoxDefaultButton.Button1);
        }

        private void btnRemove_Click(object sender, EventArgs e)
        {
            if(dgvCotizacion.Rows.Count != 0){
                int selRow = dgvCotizacion.SelectedRows[0].Index;
            
                double t = Double.Parse(txtTotal.Text);
                t -= Double.Parse(dgvCotizacion.Rows[selRow].Cells[3].Value.ToString());
                dgvCotizacion.Rows.RemoveAt(selRow);
                txtTotal.Text = "" + t;
            }
        }

    }
}
